﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using Resources;

namespace hercules.Models
{
    public class PessoaModel
    {
        [Required(ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_campo_requerido")]
        [DisplayName("Id Pessoa")]
        public Int32 IdPessoa { get; set; }

        [DisplayName("Representante")]
        public Int32 Representante { get; set; }

        [Required(ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_campo_requerido")]
        [DataType(DataType.Text)]
        [DisplayName("Nome")]
        public string Nome { get; set; }

        [DisplayName("Endereço")]
        public string Endereco { get; set; }

        [DisplayName("E-mail")]
        [RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "E-mail em formato inválido")]
        public string Email { get; set; }


        [Required(ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_campo_requerido")]
        [StringLength(11, MinimumLength = 11, ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_length_unico")]
        [DisplayName("CPF")]
        public string Cpf { get; set; }

        [StringLength(13, MinimumLength = 13, ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_length_unico")]
        [DisplayName("Cnpj")]
        public string Cnpj { get; set; }

        [Required(ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_campo_requerido")]
        [DisplayName("RG")]
        public string Rg { get; set; }

        [DisplayName("Inscrição Estadual")]
        public Int32 Insc_estadual { get; set; }

        [DisplayName("Bairro")]
        public string Bairro { get; set; }

        [DisplayName("Cidade")]
        public string Cidade { get; set; }

        [StringLength(8, MinimumLength = 8, ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_length_unico")]
        [DisplayName("Cep")]
        public string Cep { get; set; }

        [DisplayName("Estado")]
        public string Estado { get; set; }

        [DisplayName("Conta")]
        public Int32 Conta { get; set; }

        [DisplayName("Agência")]
        public Int32 Agencia { get; set; }

        [DisplayName("Banco")]
        public string Banco { get; set; }

        [DisplayName("Pessoa")]
        public Pessoa Pessoa { get; set; }

        public Pessoa PessoaModelToPessoa(PessoaModel pessoaModel)
        {
            Pessoa pessoa = new Pessoa();
            pessoa.idPessoa = pessoaModel.IdPessoa;
            pessoa.representante = pessoaModel.Representante;
            pessoa.nome = pessoaModel.Nome;
            pessoa.endereco = pessoaModel.Endereco;
            pessoa.email = pessoaModel.Email;
            pessoa.rg = pessoaModel.Rg;
            pessoa.insc_estadual = pessoaModel.Insc_estadual;
            pessoa.cpf = pessoaModel.Cpf;
            pessoa.cnpj = pessoaModel.Cnpj;
            pessoa.bairro = pessoaModel.Bairro;
            pessoa.cidade = pessoaModel.Cidade;
            pessoa.cep = pessoaModel.Cep;
            pessoa.estado = pessoaModel.Estado;
            pessoa.conta = pessoaModel.Conta;
            pessoa.agencia = pessoaModel.Agencia;
            pessoa.banco = pessoaModel.Banco;

            pessoa.Pessoa2 = pessoaModel.Pessoa;

            return pessoa;
        }

        public PessoaModel PessoaToPessoaModel(Pessoa pessoa)
        {
            PessoaModel pessoaModel = new PessoaModel();
            pessoaModel.IdPessoa = pessoa.idPessoa;
            pessoaModel.Nome = pessoa.nome;
            pessoaModel.Endereco = pessoa.endereco;
            pessoaModel.Email = pessoa.email;
            pessoaModel.Rg = pessoa.rg;
            pessoaModel.Cpf = pessoa.cpf;
            pessoaModel.Cnpj = pessoa.cnpj;
            pessoaModel.Bairro = pessoa.bairro;
            pessoaModel.Cidade = pessoa.cidade;
            pessoaModel.Cep = pessoa.cep;
            pessoaModel.Estado = pessoa.estado;
            pessoaModel.Banco = pessoa.banco;
            pessoaModel.Pessoa = pessoa.Pessoa2;

            if (pessoa.representante != null) pessoaModel.Representante = (int)pessoa.representante;
            if (pessoa.insc_estadual != null) pessoaModel.Insc_estadual = (int)pessoa.insc_estadual;
            if (pessoa.conta != null) pessoaModel.Conta = (int)pessoa.conta;
            if (pessoa.agencia != null) pessoaModel.Agencia = (int)pessoa.agencia;

            return pessoaModel;
        }

        public List<PessoaModel> ListPessoaToPessoaModel(List<Pessoa> pessoas)
        {
            return pessoas.Select(PessoaToPessoaModel).ToList();
        }
    }
}